home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swags_z.zip / TSR.SWG / 0023_Disable ctrl-alt-del.pas < prev    next >
Pascal/Delphi Source File  |  1994-02-05  |  2KB  |  54 lines

  1.  
  2. {
  3. Hmm ... My initial attempt was to disable the Int 19h handler, which is
  4. called when you hit ctrl-alt-del; but it didn't work.  So here's a TSR
  5. that "cheats": if you hit "ctrl" and "alt" and then "del", it flags
  6. "ctrl" and "alt" as "not down" and so your system never sees the reboot
  7. condition. }
  8.  
  9. {$M $0400, $0000, $0000}
  10. {$F+}
  11.  
  12. program noreboot;
  13. uses dos;
  14.  
  15. const ctrlbyte = $04;  { Memory location $0040:$0017 governs the statuses of }
  16.       altbyte  = $08;  { the Ctrl key, Alt, Shifts, etc.  the "$04" bit }
  17.                        { handles "Ctrl"; "$08" handles "Alt". }
  18.  
  19. var old09h: procedure;                          { original keyboard handler }
  20.     ctrldown, altdown, deldown: boolean;
  21.     keyboardstat: byte absolute $0040:$0017;    { the aforementioned location }
  22.  
  23. {-----------------------------------------------------------------------------}
  24.  
  25. procedure new09h; interrupt;  { new keyboard handler: it checks if you've
  26.                                 pressed "Ctrl", "Alt" and "Delete"; if you
  27.                                 have, it changes "Ctrl" and "Alt" to
  28.                                 "undepressed".  Then it calls the
  29.                                 "old" keyboard handler. }
  30. begin
  31.   if port[$60] and $1d = $1d then ctrldown := (port[$60] < 128);
  32.   if port[$60] and $38 = $38 then altdown  := (port[$60] < 128);
  33.   if port[$60] and $53 = $53 then deldown  := (port[$60] < 128);
  34.   if ctrldown and altdown and deldown then begin
  35.      keyboardstat := keyboardstat and not ctrlbyte;  { By killing the "Ctrl" }
  36.      keyboardstat := keyboardstat and not altbyte;   { and "Alt" bits, the   }
  37.      end;                                            { "reboot" never runs   }
  38.   asm
  39.     pushf
  40.     end;
  41.   old09h;
  42.   end;
  43.  
  44. {-----------------------------------------------------------------------------}
  45.  
  46. begin
  47.   getintvec($09, @old09h);
  48.   setintvec($09, @new09h);  { set up new keyboard handler }
  49.   ctrldown := false;
  50.   altdown := false;         { Set "Ctrl", "Alt", "Delete" to "False" }
  51.   deldown := false;
  52.   keep(0);
  53.   end.
  54.